package com.example.dem11;

/**
 * @program: xian-cheng
 * @description:
 * @author: 诸葛龙辰
 * @create: 2022-11-01 20:50
 **/
public class Bank {
    private double balance;
    /**
     * 表示有钱没钱: true表示有钱  false表示没钱
     */

    private boolean flag=false;


    /**
     *  存钱方法 synchronized 我在方法上加synchronized 表示整个方法都上锁了 默认的锁对象就是this对象
     */

    public synchronized void save(double money){
        System.out.println(Thread.currentThread().getName());

        //卡中有钱--无需存钱
        if(flag==true){
            try {
                //表示当前线程释放锁并进入等待队列
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        balance=balance+money;
        System.out.println(Thread.currentThread().getName()+"存入了"+money+"元，卡中余额:"+balance);
        flag=true;
        //唤醒等待队列中的线程
        notify();

    }
    //取钱方法
    public synchronized void token(double money){
        System.out.println(Thread.currentThread().getName());
        if(flag==false){
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        balance=balance-money;
        System.out.println(Thread.currentThread().getName()+"取出了"+money+"元，卡中余额:"+balance);
        flag=false;
        notify();
    }

}
